

package com.hazelcast.internal.networking.nio;

import com.hazelcast.internal.metrics.MetricsRegistry;
import com.hazelcast.internal.server.MockServerContext;
import com.hazelcast.internal.server.NetworkingFactory;
import com.hazelcast.internal.server.tcp.TcpServerConnectionChannelErrorHandler;
import com.hazelcast.logging.LoggingService;
import com.hazelcast.spi.properties.HazelcastProperties;

import static com.hazelcast.spi.properties.ClusterProperty.*;

public class SelectWithSelectorFix_NioNetworkingFactory implements NetworkingFactory {

    @Override
    public NioNetworking create(final MockServerContext serverContext, MetricsRegistry metricsRegistry) {
        HazelcastProperties properties = serverContext.properties();
        LoggingService loggingService = serverContext.loggingService;
        return new NioNetworking(new NioNetworking.Context().loggingService(loggingService).metricsRegistry(metricsRegistry).threadNamePrefix(serverContext.getHazelcastName()).errorHandler(new TcpServerConnectionChannelErrorHandler(loggingService.getLogger(TcpServerConnectionChannelErrorHandler.class))).inputThreadCount(properties.getInteger(IO_INPUT_THREAD_COUNT)).outputThreadCount(properties.getInteger(IO_OUTPUT_THREAD_COUNT)).balancerIntervalSeconds(properties.getInteger(IO_BALANCER_INTERVAL_SECONDS)).selectorMode(SelectorMode.SELECT_WITH_FIX).selectorWorkaroundTest(true));
    }
}
